"""
    和文件相关的类定义
"""
import json

from data_define import Record


# 先定义一个抽象类, 用作顶层设计, 明确功能
class FileReader:

    def read_data(self) -> list[Record]:
        """读取文件数据, 读到的每一条数据都转换为Record对象, 将他们都封装到List内返回即可"""
        pass


class TextFileReader(FileReader):

    def __init__(self, path):
        self.path = path  # 定义成员变量, 记录文件的路径

    # 实现父类的抽象方法
    def read_data(self) -> list[Record]:
        f = open(self.path, "r", encoding="utf-8")
        record_list: list[Record] = list()
        for line in f.readlines():
            line = line.strip()  # 去掉前后的空格和回车符
            data_list = line.split(",")
            record = Record(data_list[0], data_list[1], int(data_list[2]), data_list[3])
            record_list.append(record)
            # print(line)
        f.close()
        return record_list


class JsonFileReader(FileReader):

    def __init__(self, path):
        self.path = path  # 记录文件路径

    def read_data(self) -> list[Record]:
        f = open(self.path, "r", encoding="utf-8")
        record_list: list[Record] = list()
        for line in f.readlines():
            data_dict = json.loads(line)
            record = Record(data_dict["date"], data_dict["order_id"], int(data_dict["money"]), data_dict["province"])
            record_list.append(record)
        f.close()
        return record_list


if __name__ == '__main__':
    text_file_data = TextFileReader("D:\\file\\2011年1月销售数据.txt")
    list1 = text_file_data.read_data()
    json_file_data = JsonFileReader("D:\\file\\2011年2月销售数据JSON.txt")
    list2 = json_file_data.read_data()

    for l in list1:
        print(l)

    for l in list2:
        print(l)
